/**
 * 防抖函数
 * @param {Function} fn 需要防抖的函数
 * @param {number} wait 等待时间（毫秒）
 * @returns {Function} 防抖后的函数
 */
export function debounce(fn, wait) {
    let timer = null
    return function () {
        let context = this,
            args = arguments

        // 如果此时存在定时器的话，则取消之前的定时器重新记时
        if (timer) {
            clearTimeout(timer)
            timer = null
            // console.log('触发debounce')
        }

        // 设置定时器，使事件间隔指定时间后执行
        timer = setTimeout(() => {
            fn.apply(context, args)
        }, wait)
    }
}

/**
 * 节流函数（可选，也经常用到）
 * @param {Function} fn 需要节流的函数
 * @param {number} wait 等待时间（毫秒）
 * @returns {Function} 节流后的函数
 */
export function throttle(fn, wait) {
    let timer = null
    return function () {
        let context = this,
            args = arguments

        if (timer) {
            return
        }

        timer = setTimeout(() => {
            fn.apply(context, args)
            timer = null
        }, wait)
    }
}
